草庐IT

C++ 11:std::thread池化?

全部标签

C++11 局部命名引用返回值(xvalue)?

我们有以下类型X和函数f:structX{...};Xf(){...};现在考虑另一个函数g的三个替代定义:(1)voidg(){Xx=f();...}(2)voidg(){X&x=f();...}(3)voidg(){X&&x=f();...}三种不同情况下定义的行为(或潜在行为)有何不同?(假设占位符'...'代码在三种情况下是相同的)更新:如果g返回一个X会怎样:以下是否合法且正确?Xg(){X&&x=f();...returnmove(x);}(此举是否必要,是否有任何作用?)您是否希望RVO链接以便下面产生相同的代码?Xg(){Xx=f();...returnx;}

c++ - std::function 的异常安全

我尝试查找这段代码是否会抛出异常,但没有成功:std::functionf=[]{};根据标准,std::function的复制或移动构造函数不是noexcept。但我想缺少noexcept关键字是因为std::function还包装了用户定义的仿函数对象,其复制或移动构造函数可能会抛出。在我的例子中,异常(exception)似乎不太可能,但有可能吗? 最佳答案 Inmycaseanexceptionseemsveryunlikelybutisitpossibleatall?原则上是的。std::function将不得不分配内存来

c++ - thread::get_id (C++11) 是免费的吗?

我想测试调用我的一个类的不同函数的线程。我有一个关键时间线程,我不希望任何人调用一个可能调用new的函数,以便从该线程调用。但是,由于这2个函数是公共(public)的,我无法通过语言强制执行。我的想法是测试线程id。假设我可以确保初始化线程ID的调用在正确的线程中,我只需要在其他调用中调用thread::get_id()并与我保存的线程ID进行比较。问题是我也想在关键线程中测试这个ID,但我不能锁定那个线程。因此我的问题是:thread::get_id()是否没有锁定(最糟糕的执行时间是什么时候)? 最佳答案 标准不保证threa

c++ - 如何将 tr1/array 转换为 std::string?

我想知道如何投std::tr1::array到std::string?编译器总是报错,我试过了std::tr1::arraysss;string(sss);stringasd(sss);两者都有效... 最佳答案 unsignedchar让这变得棘手。如果您知道您的系统使用2s补码1字节8位unsignedchar和char,以及从unsignedchar到char的隐式转换做你想做的(这些并不总是正确的!),并且你的数组缓冲区是null终止的(即,第一个0之后的字符应该被丢弃),这个函数有效:templatestd::string

C++11 构造函数

新的move构造函数/move运算符允许我们转移对象的所有权,从而避免使用(昂贵的)复制构造函数调用。但是是否可以避免构造临时对象(不使用返回参数)?示例:在下面的代码中,构造函数被调用了4次-但理想情况下我想做的是避免在cross方法中构造任何对象。使用返回参数(例如voidcross(constVec3&b,Vec3&out)是可能的,但读起来很难看。我有兴趣更新现有变量。#includeusingnamespacestd;classVec3{public:Vec3(){staticintcount=0;id=count++;p=newfloat[3];cout

c++ - 从 c++11 中的用户定义文字返回 std::array

我刚刚安装了gcc-4.8.1,当我意识到我可以执行-std=c++1y并获得多行constexpr时,我非常兴奋。我很想知道,是否有办法使这项工作正常进行?#includeconstexprautooperator""_a1(constchar*text,constsize_tsize)->std::array{std::array()blah;std::strncpy(blah.data(),test,size);//dosomestufftoblahatcompiletimereturnblah;}intmain(){autoblah="helloworld"_a2;}但是我变得

RT-Thread 软件包-软件包分类-IoT-WebTerminal①

RT-Thread软件包-软件包分类-IoT-WebTerminal①RT-Thread软件包-软件包分类-IoT-WebTerminal①WebTerminal让你的终端在浏览器上跑起来1、WebTerminal是什么2、依赖信息3、如何使用3.1初始化3.2启动3.3传送资源文件3.4使用WebFinsh示例代码维护人:RT-Thread软件包-软件包分类-IoT-WebTerminal①WebTerminal让你的终端在浏览器上跑起来1、WebTerminal是什么WebTerminal是一款针对RT-ThreadRTOS的库。启动后,可以通过网页访问设备的控制台(命令行)系统,实现设备

c++ - x86_64 和 ARM 上的原子 CAS 操作是否始终使用 std::memory_order_seq_cst?

作为AnthonyWilliamssaid:some_atomic.load(std::memory_order_acquire)doesjustdropthroughtoasimpleloadinstruction,andsome_atomic.store(std::memory_order_release)dropsthroughtoasimplestoreinstruction.众所周知,在x86上,操作load()和store()内存屏障memory_order_consume,memory_order_acquire,memory_order_release,memory_o

c++ - std::initializer_list 作为构造函数的模板参数

考虑一个从std容器继承的类,该类具有调用容器底层构造函数的模板构造函数。此模板构造函数适用于简单的复制和移动构造函数,但不适用于initializer_list构造函数。templateclasstest:publiccontainer_T{public:usingcontainer_type=container_T;test(){}//templatedconstructortemplatetest(Tt):container_T(t){}//withoutthisitwon'tcompiletest(std::initializer_listl):container_T(l){}

c++ - 从 std::string 中提取整数

我正在编写简单的OBJ加载器,我遇到了下一个问题-我必须从下一个std::string中提取整数:fv0/vt0/vn0v1/vt1/vn0...vk/vtk/vnk其中vk、vtk、vnk都是int值,/和值之间没有空格组与组之间只有一个空格。由于文件可能非常大,而且这种类型的行可能出现超过100000次,我需要一种有效的方法来从像这样的字符串中提取整数。编辑:正如Jesse所问,这是我目前的方法(我假设数据格式正确!):intp,t,n;constchar*l=line.c_str()+2;for(intvIndex=0;l&&sscanf(l,"%d/%d/%d",&p,&t,&